import logging

from django.core.exceptions import ValidationError
from django.shortcuts import render
from  django.http import HttpResponse
# Create your views here.
from django.views.decorators.csrf import csrf_exempt
import  datetime
from collect_pic import oa_api, aliyun_api, tests

logger = logging.getLogger(__name__)


def index(request,userid):
    request.session['userid'] = userid
    logger.info("用户"+str(userid)+"进入首页")
    return  render(request,'index.html')



@csrf_exempt
def test3(request):
    # 创建人  人员ID
    userid = request.session.get('userid')
    # 创建日期
    currentDateTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    #用户
    log_username = "用户" + str(userid)
    if request.method=='GET':
        return render(request, 'testimg.html')
    # print(request.POST.dict())

    if request.method == 'POST': #上传
        print('>>>>>', request.FILES)
        #传来的图片
        img_objs = request.FILES.getlist('oneimg[]')


        #限制附件为5
        if len(img_objs) > 2:
            logger.error(log_username+"提交附件数大于2！")
            raise ValidationError("最大上传2个附件")
        #打印提交的发票数
        logger.info(log_username+"提交发票数为:" + str(len(img_objs)))
        if img_objs:
            #遍历附件
            for img_obj in img_objs:
                # 获取文件名
                file_name = img_obj.name
                # 获取文件大小（以字节为单位）
                file_size = img_obj.size
                # 验证文件类型，这里只允许图片文件（示例）
                valid_image_extensions = ['.jpg', '.jpeg', '.png']
                if not any(file_name.endswith(ext) for ext in valid_image_extensions):
                    logger.error(log_username + "提交了非图片")
                    raise ValidationError("只允许上传图片文件")
                # 验证文件大小，这里假设不超过5MB（示例）
                if file_size > 5 * 1024 * 1024:
                    logger.error(log_username + "提交文件大小不能超过5MB")
                    raise ValidationError("文件大小不能超过5MB")
                #打印附件名称
                logger.info("附件名称"+img_obj.name)
                # 读取文件内容
                file_content = img_obj.file.read()

                #传入图片。返回图片识别的结果
                domain_data = aliyun_api.aliyun_request_data(file_content)

                # 装填建模表单数据
                completed_data = {
                #发票类型
                'fplx' : domain_data['invoiceType'],
                #发票号码
                'fphm' : domain_data['invoiceNumber'],
                #开票日期
                #格式化
                'kprq' : datetime.datetime.strptime(domain_data['invoiceDate'],'%Y年%m月%d日').strftime('%Y-%m-%d'),
                #购买方名称
                'gmfmc' : domain_data['purchaserName'],
                #购买方纳税人识别号
                'gmfnsrsbh' : domain_data['purchaserTaxNumber'],
                #销售方名称
                'xsfmc' : domain_data['sellerName'],
                #销售方纳税人识别号
                'xsfnsrsbh' : domain_data['sellerTaxNumber'],
                #税前金额
                'sqje' : domain_data['invoiceAmountPreTax'],
                #税额
                'se' : domain_data['invoiceTax'],
                #金额
                'je' : domain_data['totalAmount'],
                #发票状态
                'fpzt' : ""
                }
                # 消费类型
                xllx = []
                for i in domain_data['invoiceDetails']:
                    xllx.append(i['itemName'])
                completed_data['xflx'] = ','.join(str(i['itemName']) for a in xllx)
                #查重 表单中是否已存在此发票号码
                select_data = {
                    "fphm" : completed_data["fphm"]
                }
                logger.info("发票号码是:"+completed_data["fphm"])
                oa_api.select_fphm_isExist(userid=userid,data=select_data,currentDateTime=currentDateTime)
                #创建数据
                oa_api.create_formdata(data=completed_data,userid=userid,currentDateTime=currentDateTime)
            return HttpResponse('ok')
        logger.error(log_username + "不能上传空附件")
        raise ValidationError("不能上传空附件！")